package itheima_edu_info_manager.service;


import itheima_edu_info_manager.dao.BaseStudentDao;
import itheima_edu_info_manager.dao.StudentDaoFactory;
import itheima_edu_info_manager.domain.Student;

public class StudentService {
    //通过学生库管工厂类，获取库管对象
    private BaseStudentDao studentDao = StudentDaoFactory.getStudentDao();

    //此方法用于添加学生
    public boolean addStudent(Student stu) {
        /*
            这个方法要做的事
            1、将接受到的学生对象，传递给StudentDao(仓管),让它去完成添加的功能
            2、返回一个boolean类型的结果给StudentController

            添加功能加入学号判断:
            1、从StudentDao(仓管)中获取存储学生对象的数组，调用内部findAllStudent方法，该方法返回学生数组
            2、遍历数组获取每一个学生对象，判断学号是否存在
            3、返回true or false的结果


        */
        //1、将接受到的学生对象，传递给StudentDao(仓管),让它去完成添加的功能
        //2、返回一个boolean类型的结果给StudentController
        return studentDao.addStudent(stu);
    }

    public boolean isExists(String id) {
        //从StudentDao(仓管)中获取存储学生对象的数组，调用内部findAllStudent方法，该方法返回学生数组
        Student[] students = studentDao.findAllStudent();
        //遍历数组获取每一个学生对象，判断学号是否存在
        //返回true or false的结果
        int index = -1;//标记位思想
        for (int i = 0; i < students.length; i++) {
            Student stu = students[i];
            if (stu != null && stu.getId().equals(id)) {//
                index = i;//遇到了相同的学生id就将index的值赋为当前索引
                break;
            }
        }
        return index != -1;//索引未变化，说明在学生数组中没有找到与给的id相同的学生对象
    }

    public Student[] findAllStudent() {
        /*
            1、从StudentDao中获取存储学生对象的数组，调用内部findAllStudent方法
            2、判断学生数组中是否有数据
                有：返回数组地址
                无：返回null
        */
        Student[] students = studentDao.findAllStudent();
        for (int i = 0; i < students.length; i++) {
            Student stu = students[i];
            if (stu != null) {
                return students;//只要遇到一个学生对象不是null就说明学生数组里有学生对象，返回数组的地址
            }
        }
        return null;
    }

    public boolean deleteStudentById(String id) {
        return studentDao.deleteStudentById(id);
    }

    public boolean updateStudent(Student newStudent,String id) {
        return studentDao.updateStudent(newStudent,id);
    }
}
